<template>
  <div class="audition250">
    <v-md-preview :text="text1" />
  </div>
</template>

<script>
const prefix = '``` js'
const suffix = '```'
export default {
  name: 'Audition250',
  data() {
    return {
      text1: `${prefix}
      //手写代码，监测数组变化，并返回数组长度
      // 获取Array的原型，并创建一个新的对象指向这个原型
      // const arrayMethods = Object.create(Array.prototype)
      // 创建一个新的原型，这就是改造之后的数组原型
      const ArrayProto = []
      // 重新构建Array原型里面的虽有方法
      Object.getOwnPropertyNames(Array.prototype).forEach(method => {
        if (typeof Array.prototype[method] === "function") {
          ArrayProto[method] = function () {
            console.log("我已经监听到数组触发了" + method + "事件")
            let len = this.length
            let result = Array.prototype[method].apply(this, arguments)
            console.log(len, this.length);
            if (len !== this.length) return this.length
            return result
          }
        }
      })
      let list = [1, 2, 3]
      // 将数组的原型链指向新构造的原型
      list.__proto__ = ArrayProto
      // 执行push事件
      console.log(list.push(2), list.pop(2), list.slice(2), list.unshift(2));
      \n${suffix}`,
    }
  }
}
</script>

<style>

</style>